查看原文
其他

ISSCC2017 Deep-Learning Processors文章学习 (五)

2017-02-15 T.S. StarryHeavensAbove


第五篇

“A 288μW Programmable Deep-Learning Processor with 270KB On-Chip Weight Storage Using Non-Uniform Memory Hierarchy for Mobile Intelligence”


Suyoung Bang1, Jingcheng Wang1, Ziyun Li1, Cao Gao1, Yejoong Kim1,2, Qing Dong1, Yen-Po Chen1, Laura Fick1, Xun Sun1, Ron Dreslinski1, Trevor Mudge1, Hun Seok Kim1, David Blaauw1, Dennis Sylvester1 

1University of Michigan, Ann Arbor, MI

2CubeWorks, Ann Arbor, MI


从这个图可以看出本文工作的驱动和提出的方案。智能IoT节点是个比较泛的概念,具体的需求差别很大。这里主要提的是跟智能处理相关的部分,另外一块不可缺少的是通信部分,包括基带(比如NB-IoT)以及RF。相比这次会议的其它论文,本文工作特色是对智能应用的存储问题的分析和优化。

首先,作者对Deep Learning和传统计算的存储需求和访存特点进行了对比。

这里面可以看到了两个重要的差别在于1. 访存基本是可以静态调度的,也就是可以预先设计好的。2. cache没什么效果。“... the key observation that deep learning algorithms can be deterministically scheduled at compilation time, predetermining optimal memory assignments and avoiding the need for traditional caches with significant power/area overhead”


第一点基本没什么异议。不过,对于第二点,的看法是传统的cache效果不好可以理解,但是专门针对DL应用设计一些新的类型的cache还是值得尝试的。


针对这些差别,本文提出了相应的技术,下面我们就分别分析一下。

说白了,本文说的NON-Uniform Memory Architecture(NUMA)其实就是不使用一个统一的模式,通过大量的仿真,找到一个合适的memory配置(可能包括很多层次和类型的memory),来达到memory面积和访存功耗间的平衡(或者找到一个相对较好的方案)。换句话说,由于对存储器的访问模式,是可以静态调度的, 所以总能“试”出来一个好的方案。这里引出一个值得讨论的地方,如何高效的“试”呢?是不是可以建立一套方法学和工具来支持这种设计空间的探索呢?后面我会专门讨论一下这个问题。


除了在架构层面对memory的配置进行优化,本文工作还对memory本身的设计进行了探讨。不过,在看具体的memory设计之前,我们还是先看一下本文提出的Deep Learning Accelerator的整体架构。

DLA由4个PE(Processing Element),这些PE的memory是4级的NUMA架构(每级的配置就是根据前面说的大量仿真得到的)。每个PE有一个指令buffer,状态寄存器,数据buffer,controller,ALU,memory address mapping unit和memory arbitration unit。Data buffers实现从96b的数据中unpacking(或者packing到96b),来实现可配置数据宽度:6/8/12/16b for weights and neurons;16/24/32b for accumulation。这些数据经过移位和截断作为下一层neuron的输入。PE的CISC处理包括: 1) FCL processing, 2) FFT, 3) data-block move, and 4) LUT-based non-linear activation function。这里可以看到本文的工作在CISC处理上做的还是比较有限的。在访存方面,文章再次提到“PEs can be programmed via offline scheduling optimization to avoid memory access collisions and contamination.” 可以看出离线的调度优化起到了重要的作用。


下面具体看看PE memory的设计:


首先,PE memory的每个bank包括一些sub-arrays。这些子阵列共享一个地址address decoder和readout电路来降低访存的功耗。PE memory对分层的memory设计了gating电路来避免不必要的信号翻转。具体来说,就是低层的memory访问信号不会传播到高层的memory。由于memory分块进行了优化,同时访存调度具有确定的特征,memory address decoder可以通过一个sequential access的方式来实现进一步的优化。另外,由于采用了静态的memory分块调度(static tiling schedule),在大多数处理时间里,在一个特定的PE中,只有很少的bank被持续访问,memory采用了一个动态睡眠模式(dynamic drowsy mode)来减少SRAM leakage。Each PE dynamically controls power gating and clamping headers of SRAM peripheral circuits and arrays, bank-by-bank based on the schedule (Fig. 14.7.4). During drowsy mode, peripherals are power-gated, but array voltage is clamped with an NMOS header and a programmable on-chip VREF to ensure data retention.(这一段具体控制看原文比较清楚)



最后的实验结果就不详细分析了。


References:

[1] N. D. Lane, et al., “Can Deep Learning Revolutionize Mobile Sensing?” ACM International Workshop on Mobil Computing Systems and Applications

(HotMobile), pp. 117-122, 2015.

[2] Y.-H. Chen, et al., “Eyeriss: An Energy-Efficient Reconfigurable Accelerator for Deep Convolutional Neural Networks,” ISSCC, pp. 262-263, 2016.

[3] G. Moons, et al., “A 0.3-2.6 TOPS/W Precision-Scalable Processor for Real-Time Large-Scale ConvNets,” IEEE Symp. VLSI Circuits, 2016.

[4] G. Kim, et al., “A Millimeter-Scale Wireless Imaging System with Continuous Motion Detection And Energy Harvesting,” IEEE Symp. VLSI Circuits, 2014.


延 伸 思 考

本文对memory优化所做的很多工作,基于一个“观察”:“...deep learning algorithms can be deterministically scheduled at compilation time...”。通过仿真可以很大程度确定调度的需求,进而得到优化的设计。而这个思路其实也可以扩展到memory以外的地方,比如对datapath的数据宽度,定点数的定点位置等等。

更宽泛的说,Deep Learning Processor本质上是一个ASIP(专用处理器),要做的工作就是基于特定明确需求约束,进行设计空间探索,找到最优设计。其核心问题实际是如何实现高效的设计空间探索。相信在ASIP设计中形成的方法学,工具链和实践经验对DLP的设计和优化会有很大帮助。

T.S.

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存